package com.webermagem.controller;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.hibernate.Session;

import com.webermagem.DAO.LeitoDAO;
import com.webermagem.model.Leito;
import com.webermagem.model.UsuarioSessao;
import com.webermagem.util.SessionManager;

@ManagedBean
@SessionScoped
public class RingController implements Serializable{

	private static final long serialVersionUID = 8958321107063075256L;

	private List<Leito> leitos;  
	private int selectedLeito;
	private int desocupiedLeito;
	private LeitoDAO leitoDao = new LeitoDAO();
	private boolean vazio;
	
	public RingController() {
		this.getRingController();
	}
	
	@SuppressWarnings("unchecked")
	public void getRingController(){
		FacesContext facesContext = FacesContext.getCurrentInstance();
		leitos = (ArrayList<Leito>)leitoDao.listOrdenado((Session)SessionManager.getSessionAttribute(facesContext, "transacao"), " from Leito");
		atualizaVazio();
	}
	
	public void atualizaVazio() {
		
		vazio = true;
		
		for (Leito leito : leitos) {
			if(leito.getPaciente() != null) {
				vazio = false;
				break;
			}
		}
		
	}
	
	public void desocuparLeito(){
		
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		Leito leito = (Leito)leitoDao.getByID((Session)SessionManager.getSessionAttribute(facesContext, "transacao"), desocupiedLeito, new Leito());
		
		leito.setPaciente(null);
		
		leitoDao.update((Session)SessionManager.getSessionAttribute(facesContext, "transacao"), leito);
		
		try {  
			
			FacesContext.getCurrentInstance().getExternalContext().redirect("/utineonatal/ui/formLeitos.xhtml");  
			return;  
			
		} catch (IOException ex) {  
			ex.printStackTrace();  
		}  

	}

	public List<Leito> getLeitos() {  
		return leitos;  
	}  
	
	public void setLeitos(List<Leito> leitos) {
		this.leitos = leitos;
	}

	public int getSelectedLeito() {  
		return selectedLeito;  
	}  
	
	public void setSelectedLeito(int selectedLeito) {
		this.selectedLeito = selectedLeito;
		this.redireciona();
	}

	public int getDesocupiedLeito() {
		return desocupiedLeito;
	}

	public void setDesocupiedLeito(int desocupiedLeito) {
		this.desocupiedLeito = desocupiedLeito;
		this.desocuparLeito();
	}

	public LeitoDAO getLeitoDao() {
		return leitoDao;
	}

	public void setLeitoDao(LeitoDAO leitoDao) {
		this.leitoDao = leitoDao;
	}

	public boolean isVazio() {
		return vazio;
	}

	public void setVazio(boolean vazio) {
		this.vazio = vazio;
	}

	public void redireciona(){

		if (selectedLeito != 0){
			
			FacesContext facesContext = FacesContext.getCurrentInstance();

			SessionManager.setSessionAttribute(facesContext, "leito", selectedLeito);

			try {
				
				UsuarioSessao usuario = (UsuarioSessao)SessionManager.getSessionAttribute(facesContext, "usuarioSessao");
				
				if (usuario.getAuthority().equals("ROLE_ADMIN") || usuario.getAuthority().equals("ROLE_ENF")){
					FacesContext.getCurrentInstance().getExternalContext().redirect("/utineonatal/ui/formCriarPacientes.xhtml");  
					return;  
				}else if (usuario.getAuthority().equals("ROLE_TEC")){
					FacesContext.getCurrentInstance().getExternalContext().redirect("/utineonatal/ui/finalizacao.xhtml");
					return;
				}
			} catch (IOException ex) {  
				ex.printStackTrace();  

			}  

		}
	}

}